#############类装饰器
class Test(object):
    # 通过初始化方法，将要被装饰的函数传进来并记录下来
    def __init__(self, func):
        self.__func = func

    # 重写 __call__ 方法来实现装饰内容
    def __call__(self, *args, **kwargs):
        print('wrapper context')
        self.__func(*args, **kwargs)

# 实际通过类的魔法方法call来实现
@Test  # --> show = Test(show) show由原来引用函数,装饰后变成引用Test装饰类的对象
def show():
    pass

if __name__ == "__main__":
    show()  # 对象调用方法,实际上是调用魔法方法call,实现了装饰器
